﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GestionePolveri2.DAL;
using GestionePolveriLib.BL.Reports;
using GestionePolveriLib.BL.FilterBags;
using FrameworkLib.Facades;

namespace GestionePolveriLib.Facades.Reports
{
    public class ReportDirezionaleFacade : FacadeBase<GestionePolveriEntities>
    {
        ReportDirezionaleFilterBag m_filter = null;

        public ReportDirezionaleFacade()
        {
            
        }

        public ReportDirezionaleFacade(ReportDirezionaleFilterBag filter)
        {
            m_filter = filter;
        }

        /// <summary>
        /// Get the data for ReportDirezionale (main)...
        /// </summary>
        /// <returns></returns>
        public List<ReportDirezionale> GetReportData()
        {
            List<ReportDirezionale> retValue = null;

            byte? tipo = null;

            switch (m_filter.Tipo)
            {
                case PolvereTypes.Tutte:
                    tipo = null;
                    break;
                case PolvereTypes.Normali:
                    tipo = 0;
                    break;
                case PolvereTypes.XXXX:
                    tipo = 1;
                    break;
                default:
                    break;
            }

            //retValue = this.GetContext().GetReportDirezionaleData(m_filter.PeriodFrom, 
            //                                                      m_filter.PeriodTo, 
            //                                                      m_filter.CodicePolvere, 
            //                                                      m_filter.Famiglia, 
            //                                                      m_filter.Impianto, 
            //                                                      m_filter.Applicazione, 
            //                                                      m_filter.ColoriAbbinati,
            //                                                      m_filter.Ordinamento,
            //                                                      tipo).Select(x => new ReportDirezionale(x)).ToList();

            //List<ReportDirezionaleXXXX> retValueXXX = null;
            //retValueXXX = this.GetContext().ReportDirezionalePolveriXXXX(m_filter.PeriodFrom, 
            //                                                      m_filter.PeriodTo, 
            //                                                      m_filter.CodicePolvere, 
            //                                                      m_filter.Famiglia, 
            //                                                      m_filter.Impianto, 
            //                                                      m_filter.Applicazione, 
            //                                                      m_filter.ColoriAbbinati,
            //                                                      m_filter.Ordinamento).Select(x => new ReportDirezionaleXXXX(x)).ToList();

            //foreach (ReportDirezionaleXXXX rd in retValueXXX)
            //{
            //    retValue.Add(rd.ToReportDirezionale());
            //}

            if(m_filter.Ordinamento == 1)
            {
                retValue = this.GetContext().GetReportDirezionaleData(m_filter.PeriodFrom,
                                                      m_filter.PeriodTo,
                                                      m_filter.CodicePolvere,
                                                      m_filter.Famiglia,
                                                      m_filter.Impianto,
                                                      m_filter.Applicazione,
                                                      m_filter.ColoriAbbinati,
                                                      m_filter.Ordinamento,
                                                      tipo).Select(x => new ReportDirezionale(x)).ToList();
            }
            else
            {
                retValue = this.GetContext().GetReportDirezionale2Data(m_filter.PeriodFrom,
                                                      m_filter.PeriodTo,
                                                      m_filter.CodicePolvere,
                                                      m_filter.Famiglia,
                                                      m_filter.Impianto,
                                                      m_filter.Applicazione,
                                                      m_filter.ColoriAbbinati,
                                                      m_filter.Ordinamento,
                                                      tipo).Select(x => new ReportDirezionale(x)).ToList();
            }

            return retValue;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public List<ReportDirezionale> GetReportDataDettaglioXXXX()
        {
            List<ReportDirezionale> retValue = new List<ReportDirezionale>();

            List<ReportDirezionaleDettaglioXXXX> retValueXXX = null;
            retValueXXX = this.GetContext().ReportDirezionaleDettaglioPolveriXXXX(m_filter.PeriodFrom,
                                                                  m_filter.PeriodTo,
                                                                  m_filter.CodicePolvere,
                                                                  m_filter.Famiglia,
                                                                  m_filter.Impianto,
                                                                  m_filter.Applicazione,
                                                                  m_filter.ColoriAbbinati,
                                                                  m_filter.Ordinamento).Select(x => new ReportDirezionaleDettaglioXXXX(x)).ToList();

            foreach (ReportDirezionaleDettaglioXXXX rd in retValueXXX)
            {
                retValue.Add(rd.ToReportDirezionale());
            }

            return retValue;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public List<ReportDirezionale> GetReportHeaderRow()
        {
            List<ReportDirezionale> retValue = new List<ReportDirezionale>();

            List<ReportDirezionaleDettaglioXXXX> retValueXXX = null;
            retValueXXX = this.GetContext().ReportDirezionaleDettaglioPolveriXXXX(m_filter.PeriodFrom,
                                                                  m_filter.PeriodTo,
                                                                  m_filter.CodicePolvere,
                                                                  m_filter.Famiglia,
                                                                  m_filter.Impianto,
                                                                  m_filter.Applicazione,
                                                                  m_filter.ColoriAbbinati,
                                                                  m_filter.Ordinamento).Select(x => new ReportDirezionaleDettaglioXXXX(x)).ToList();

            foreach (ReportDirezionaleDettaglioXXXX rd in retValueXXX)
            {
                retValue.Add(rd.ToReportDirezionale());
            }

            return retValue;
        }
    }
}
